const http = require("http");
const url = require("url");
const mysql = require("mysql");
const io = require("socket.io");
const regs = require("./regs");
let db = mysql.createPool({
	host:'localhost',
	user:'root',
	password:'lx1993225',
	database:'chat'
});
const server = http.createServer((req,res)=>{

});
server.listen(8088);
const wsServer = io.listen(server);
//缓存连接用户，方便来做群聊和单聊
//{
//	sok:aSoc,
//	ID:data[0].ID,
//	chats:1,//1为群聊，0位单聊
//}
var aSock = [];
wsServer.on("connection",sock=>{
	let sigalD = null;//单聊对象
	let current_name = null;//当前登录用户的名称
	//暂存sock对象
	let aSoc = sock;
	sock.on("reg",(user,pass)=>{
		if(!regs.user.test(user)){
			/**
			 * @querystring(注册的返回借口,返回的状态吗,返回错误描述)
			 */
			sock.emit("reg_ret",1,'用户名不符合规范')
		}else if(!regs.pass.test(pass)){
			/**
			 * @querystring(注册的返回借口,返回的状态吗,返回错误描述)
			 */
			sock.emit("reg_ret",1,'密码不符合规范')
		}else{
			db.query(`SELECT username FROM user_table WHERE username='${user}'`,(err,data)=>{
				if(err){
					sock.emit("reg_ret",1,'数据库错误1')
				}else if(data.length>0){
					sock.emit("reg_ret",1,'用户名已注册')
				}else{
					db.query(`INSERT INTO user_table (username,password,online) VALUES('${user}','${pass}',0)`,(err,data)=>{
						if(err){
							sock.emit("reg_ret",1,'数据库错误2')
						}else{
							sock.emit("reg_ret",0,'注册成功');
						}
					})
				}
			})
		}
	});
	//登录
	sock.on("log",(user,pass)=>{
		if(!regs.user.test(user)){
			sock.emit("log_ret",1,'用户名不符合规范')
		}else if(!regs.user.test(pass)){
			sock.emit("log_ret",1,'密码不符合规范')
		}else{
			db.query(`SELECT ID,password,username FROM user_table WHERE username='${user}'`,(err,data1)=>{
				var pass1 = data1[0].password
				var ID = data1[0].username
				if(err){
					sock.emit("log_ret",1,'登录失败')
				}else if(data1.length=0){
					sock.emit("log_ret",1,'查无此人')
				}else if(pass1!=pass){
					sock.emit("log_ret",1,'用户名或密码错误');
				}else{
					db.query(`UPDATE user_table SET online=1 WHERE username='${user}'`,(err,data)=>{
						if(err){
							sock.emit("log_ret",1,'数据库错误')
						}else{
							sock.emit("log_ret",0,'登录成功');
							//记录当前登录人的
							current_name = user;
							//存储对象
							aSock.push({
								sok:aSoc,
								ID:ID,
								chats:1
							})
						}
					})
				};
			})
		}
	});
	//连接用户
	sock.on('linkin',(linknum)=>{
		if(linknum){
			db.query(`SELECT ID,username FROM user_table WHERE username='${linknum}'`,(err,data)=>{
				var username = data[0].username
				if(err){
					sock.emit("link_ret",1,'连接错误')
				}else if(data.length=0){
					sock.emit("link_ret",1,'查无此人')
				}else{
					sock.emit("link_ret",0,'连接成功');
					//存储单聊的对象id
					sigalD = username;
					aSock.forEach(item=>{
						if(item.ID==username){
							item.chats=0
						};
					});
					console.log(aSock)
				}
			})
		}else{
			sock.emit("link_ret",1,'请输入用户名称');
		}

	});
	sock.on('msg',(txt)=>{
		if(!txt){
			sock.emit("msg_ret",1,"消息不能为空")
		}else{
			if(sigalD){
				aSock.forEach(item=>{
					//判断单聊还是群聊
					if(item.ID==sigalD){
						//返回用户发送的数据
						item.sok.emit("msg",current_name,txt);
					};
				});
			}else{
				//群聊
				aSock.forEach(item=>{
					if(item.sok!=sock&&item.chats==1){
						console.log(item.ID,item.chats)
						item.sok.emit("msg",current_name,txt);
					};
				});
			};
			//发送成功
			sock.emit('msg_ret',0,'发送成功');
		}
	});
	//离线
	sock.on("disconnect",()=>{
		db.query(`UPDATE user_table SET online=0 WHERE username='${current_name}'`,(err)=>{
			if(err){
				console.log('离线'+err)
			};
			current_name = null;
		})
	});
})